package com.yyb.controller;

import com.yyb.annotation.AppPermission;
import com.yyb.annotation.Log;
import com.yyb.common.PageInfo;
import com.yyb.common.Result;
import com.yyb.domain.SysRole;
import com.yyb.dto.*;
import com.yyb.enums.BusinessType;
import com.yyb.service.SysRoleService;
import io.swagger.v3.oas.annotations.Operation;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 
 * 
 * 
 */
@RestController
@RequestMapping("sysRole")
public class SysRoleController extends BaseController {


    @Resource
    private SysRoleService sysRoleService;

    /**
     * 分页查询角色
     * POST http://127.0.0.1:8080/sysRole/getByPage
     * 接口ID：148742213
     * 接口地址：https://app.apifox.com/link/project/4040316/apis/api-148742213
     */
    @PostMapping("getByPage")
    @AppPermission("system:role:query")
    @Operation(summary = "分页查询角色")
    public Result<PageInfo<SysRole, SysRoleQueryDTO>> getByPage(@RequestBody PageInfo<SysRole, SysRoleQueryDTO> pageInfo) {
        PageInfo<SysRole, SysRoleQueryDTO> info = this.sysRoleService.getByPage(pageInfo);
        return new Result<>(info);
    }

    /**
     * 添加角色
     * POST http://127.0.0.1:8080/sysRole/save
     * 接口ID：148742214
     * 接口地址：https://app.apifox.com/link/project/4040316/apis/api-148742214
     */
    @PostMapping("save")
    @AppPermission("system:role:add")
    @Operation(summary = "添加角色")
    @Log(title = "角色管理",businessType = BusinessType.INSERT)
    public Result<?> save(@RequestBody @Validated SysRoleAddDTO sysRoleAddDTO) {
        int row = this.sysRoleService.insert(sysRoleAddDTO);
        return this.toAjax(row > 0);// 意思是: 如果row大于0，则返回true，否则返回false
    }


    /**
     * 修改角色
     * PUT http://127.0.0.1:8080/sysRole/update
     * 接口ID：148742215
     * 接口地址：https://app.apifox.com/link/project/4040316/apis/api-148742215
     */
    @PutMapping("update")
    @AppPermission("system:role:update")
    @Operation(summary = "修改角色")
    @Log(title = "角色管理",businessType = BusinessType.UPDATE)
    public Result<?> update(@RequestBody @Validated SysRoleUpdateDTO sysRoleUpdateDTO) {
        int row = this.sysRoleService.updateByPrimaryKey(sysRoleUpdateDTO);
        return this.toAjax(row > 0);
    }

    /**
     * 根据ID查询角色
     * GET http://127.0.0.1:8080/sysRole/get/{roleId}
     * 接口ID：148742217
     * 接口地址：https://app.apifox.com/link/project/4040316/apis/api-148742217
     */
    @GetMapping("get/{roleId}")
    @AppPermission("system:role:query")
    @Operation(summary = "根据ID查询角色")
    public Result<SysRole> get(@PathVariable Long roleId) {
        SysRole sysRole = this.sysRoleService.selectByPrimaryKey(roleId);
        return new Result<>(sysRole);
    }

    /**
     *删除角色
     *   DELETE http://127.0.0.1:8080/sysRole/delete/{roleId}
     *   接口ID：148742216
     *   接口地址：https://app.apifox.com/link/project/4040316/apis/api-148742216
     */
    @DeleteMapping("delete/{roleId}")
    @AppPermission("system:role:remove")
    @Operation(summary = "根据ID删除角色")
    @Log(title = "角色管理",businessType = BusinessType.DELETE)
    public Result<?> delete(@PathVariable Long roleId) {
        int row = this.sysRoleService.deleteByPrimaryKey(roleId);
        return this.toAjax(row>0);
    }


    /**
     *根据角色ID查询当前角色拥有的权限菜单ID
     *   GET http://127.0.0.1:8080/sysRole/getCurrentRoleHasMenuIdsByRoleId/{roleId}
     *   接口ID：148742218
     *   接口地址：https://app.apifox.com/link/project/4040316/apis/api-148742218
     */
    @GetMapping("getCurrentRoleHasMenuIdsByRoleId/{roleId}")
    @AppPermission("system:role:query")
    @Operation(summary = "根据角色ID查询当前角色拥有的权限菜单ID")
    public Result<List<Long>> getCurrentRoleHasMenuIdsByRoleId(@PathVariable Long roleId) {
        List<Long> menuIds=this.sysRoleService.getCurrentRoleHasMenuIdsByRoleId(roleId);
        return new Result<>(menuIds);
    }


    /**
     *保存角色菜单之间的关系
     *   POST http://127.0.0.1:8080/sysRole/saveRoleMenu
     *   接口ID：148742219
     *   接口地址：https://app.apifox.com/link/project/4040316/apis/api-148742219
     */
    @PostMapping("saveRoleMenu")
    @AppPermission("system:role:selectPermission")
    @Operation(summary = "保存角色菜单之间的关系")
    @Log(title = "角色管理-保存角色菜单之间的关系",businessType = BusinessType.GRANT)
    public Result<?> saveRoleMenu(@Validated SysRoleMenuAddDTO sysRoleMenuAddDTO) {
        int row =this.sysRoleService.saveRoleMenu(sysRoleMenuAddDTO);
        return this.toAjax(row>0);
    }

    /**
     * 查询所有角色不分页
     *   GET http://127.0.0.1:8080/sysRole/getAllRoles
     *   接口ID：148742226
     *   接口地址：https://app.apifox.com/link/project/4040316/apis/api-148742226
     */
    @GetMapping("getAllRoles")
    @Operation(summary = "查询所有角色不分页")
    public Result<List<SysRole>> getAllRoles() {
        List<SysRole> sysRoleList=this.sysRoleService.getAllRoles();
        return new Result<>(sysRoleList);
    }

    /**
     *根据用户ID查询用户已拥有的角色IDS
     *   GET http://127.0.0.1:8080/sysRole/getRoleIdsByUserId/{userId}
     *   接口ID：148742227
     *   接口地址：https://app.apifox.com/link/project/4040316/apis/api-148742227
     */
    @GetMapping("getRoleIdsByUserId/{userId}")
    @Operation(summary = "根据用户ID查询用户已拥有的角色IDS")
    public Result<List<Long>> getRoleIdsByUserId(@PathVariable Long userId) {
        List<Long> roleIds=this.sysRoleService.getRoleIdsByUserId(userId);
        return new Result<>(roleIds);
    }

    /**
     * 保存用户和角色之间的关系
     *   POST http://127.0.0.1:8080/sysRole/saveUserRoles
     *   接口ID：148742228
     *   接口地址：https://app.apifox.com/link/project/4040316/apis/api-148742228
     */
    @PostMapping("saveUserRoles")
    @Operation(summary = "保存用户和角色之间的关系")
    @Log(title = "角色管理-保存用户和角色之间的关系",businessType = BusinessType.GRANT)
    public Result<?> saveUserRoles(@Validated SysRoleUserDTO sysRoleUserDTO) {
        int row =this.sysRoleService.saveUserRoles(sysRoleUserDTO);
        return this.toAjax(row>0);
    }

}
